import Controller from './Base';
import validator from 'validator';

export default class AdminUserController extends Controller {
  /**
   * 后台用户登录接口
   * 需要login和password参数
   */
  public async login() {
    const { ctx } = this;
    const { login, password } = ctx.request.body;
    // 验证参数
    if (!login || !validator.isLength(login, { min: 2, max: 40 })) {
      this.fail('validate-error', { login: '用户名或邮箱错误' });
      return;
    }
    if (!password || !validator.isLength(password, { min: 6, max: 42 })) {
      this.fail('validate-error', { password: '密码格式错误' });
      return;
    }
    // 查找数据库中是否存在指定邮箱和密码的记录
    const user = await ctx.service.adminUser.findByLogin(login);
    if (!user) {
      this.fail('validate-error', { login: '邮箱或者用户名尚未注册' });
      return;
    }
    // 校验密码
    const isPasswordValid = await user.validatePassword(password);
    if (!isPasswordValid) {
      await ctx.json(false, 'validate-error', { password: '密码错误，如需重置密码请联系管理员' });
      return;
    }

    // 验证完毕，生成token
    // const token = await createToken(user, JWT_SECRET, '1d');
    // ctx.cookies.set('mbook-admin-token', token, { httpOnly: false });
    // await ctx.json(true, 'success', token);
    ctx.body = await ctx.service.test.sayHi('egg');
  }

  /**
   * 获取用户信息
   */
  public async currentUser() {
    const { ctx } = this;
    ctx.body = await ctx.service.test.sayHi('egg');
  }

  /**
   * 获取用户列表
   * @param {String} username 用户名查询
   * @param {String} role 角色id
   * @param {String} email 邮箱查询
   * @param {String} sort 排序选项，比如 createdAt_DESC
   * @param {Boolean} all 是否查询全部
   * @param {Number} page 查询页数
   * @param {Number} limit 每页限制数
   */
  public async list() {
    const { ctx } = this;
    ctx.body = await ctx.service.test.sayHi('egg');
  }

  /**
   * 获取用户列表
   * @param {String} username 用户名
   * @param {String} email 邮箱
   * @param {String} avatar 头像
   * @param {String} role 角色
   */
  public async add() {
    const { ctx } = this;
    ctx.body = await ctx.service.test.sayHi('egg');
  }

  /**
   * 修改权限
   * @param {String} name 用户名称
   * @param {String} email 用户邮箱
   * @param {String} avatar 用户头像
   * @param {String} role 用户角色
   * @param {Boolean} reset 是否重置密码
   */
  public async update() {
    const { ctx } = this;
    ctx.body = await ctx.service.test.sayHi('egg');
  }

  /**
   * 修改权限
   */
  public async delete() {
    const { ctx } = this;
    ctx.body = await ctx.service.test.sayHi('egg');
  }
}
